package com.nacos.consumer.config;

import feign.Contract;
import feign.Logger;
import feign.Request;
import feign.Retryer;
import feign.auth.BasicAuthRequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static java.util.concurrent.TimeUnit.SECONDS;

@Configuration
public class FeignCofig {
    /** 日志 要把服务调用类所在包 输出debug级别log
     * NONE：不输出日志。
     * BASIC：只输出请求方法的 URL 和响应的状态码以及接口执行的时间。
     * HEADERS：将 BASIC 信息和请求头信息输出。
     * FULL：输出完整的请求信息。
     * */
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
    /**
     * 让 Feign 支持 Spring MVC 的注解来调用
     * 配置使用默认的契约后，用的是@RequestLine注解。RequestLine 如果不知名POST还是GET
     * 就会报 Method get not annotated with HTTP method type (ex. GET, POST)，之前定义的 Client 就用不了
     * 如果要用@RequestMapping 注解 要关闭该注释Fegin会使用SpringMvcContract契约
     * */
    /*@Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }*/
    /***
     *请求头去传递认证信息 Basic 认证方式
     *也可以自定义  implements RequestInterceptor
     */
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("user", "password");
    }
    /**重试*/
    @Bean
    public Retryer feignRetyryer(){
        //默认间隔100 毫秒  最大重试时间为1秒 ，重试次数为5
        return new Retryer.Default(100,SECONDS.toMillis(1),3);
    }
    /**超时*/
    @Bean
    public Request.Options options() {
        return new Request.Options(5000, 10000);
    }
}
